﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using acessaDB;
using Frame;
using System.Data;
using System.Configuration;
using FirebirdSql.Data.FirebirdClient;
using Estrutura;


namespace Banco
{

    public class BD_Lancamento
    {
        #region variaveis_globais

        acessaDB.conectaDBFireBird fireBird = new conectaDBFireBird();
        string conectionString = System.Configuration.ConfigurationManager.AppSettings["FireBirdConnectionLocal"];
        string usuario = string.Empty;

        #endregion

        #region construtor

        public BD_Lancamento()
        {
            if (System.Configuration.ConfigurationManager.AppSettings["ambiente"] == "PROD")
                conectionString = System.Configuration.ConfigurationManager.AppSettings["FireBirdConnectionProd"];
        }
        public BD_Lancamento(string usu_Login)
        {
            if (System.Configuration.ConfigurationManager.AppSettings["ambiente"] == "PROD")
                conectionString = System.Configuration.ConfigurationManager.AppSettings["FireBirdConnectionProd"];
            usuario = usu_Login;
        }

        #endregion

        #region metodos

        public DataSet _retorna_Lancamento(
                                                string CTM_RELVOO_ID,
                                                string LAN_DATA,
                                                string LAN_DATA_INSERT,
                                                string LAN_USU_INSERT,
                                                string LAN_DATA_UPDATE,
                                                string LAN_USU_UPDATE,
                                                string CTM_LANCAMENTO_ID,
                                                string EQUIPAMENTO_ID
                                                )
        {

            if (string.IsNullOrEmpty(CTM_RELVOO_ID)) CTM_RELVOO_ID = "'0'";
            if (string.IsNullOrEmpty(LAN_DATA)) LAN_DATA = Util.retonarAspas(Util.formataData(System.DateTime.Now.ToString()));
            if (string.IsNullOrEmpty(LAN_DATA_INSERT)) LAN_DATA_INSERT = "''";
            if (string.IsNullOrEmpty(LAN_USU_INSERT)) LAN_USU_INSERT = "'0'";
            if (string.IsNullOrEmpty(LAN_DATA_UPDATE)) LAN_DATA_UPDATE = "''";
            if (string.IsNullOrEmpty(LAN_USU_UPDATE)) LAN_USU_UPDATE = "'0'";
            if (string.IsNullOrEmpty(CTM_LANCAMENTO_ID)) CTM_LANCAMENTO_ID = "'0'";
            if (string.IsNullOrEmpty(EQUIPAMENTO_ID)) EQUIPAMENTO_ID = "'0'";

            string sql = "SELECT " +
                                  "CTM_LANCAMENTO.CTM_RELVOO_ID, " +
                                  "CTM_LANCAMENTO.LAN_DATA, " +
                                  "CTM_LANCAMENTO.LAN_DATA_INSERT, " +
                                  "CTM_LANCAMENTO.LAN_USU_INSERT, " +
                                  "CTM_LANCAMENTO.LAN_DATA_UPDATE, " +
                                  "CTM_LANCAMENTO.LAN_USU_UPDATE, " +
                                  "CTM_LANCAMENTO.CTM_LANCAMENTO_ID, " +
                                  "CTM_LANCAMENTO.EQUIPAMENTO_ID " +
                            "FROM CTM_LANCAMENTO " +
                            "LEFT JOIN CTM_RELVOO ON CTM_RELVOO.CTM_RELVOO_ID = CTM_LANCAMENTO.CTM_RELVOO_ID " +
                            "WHERE " +
                            "      (CTM_LANCAMENTO.CTM_RELVOO_ID                   = " + CTM_RELVOO_ID + "  OR " + CTM_RELVOO_ID + " = '0') AND " +
                            "      (CTM_LANCAMENTO.LAN_DATA                        = " + LAN_DATA + "  OR " + LAN_DATA + " = '') AND " +
                            "      (CTM_LANCAMENTO.LAN_DATA_INSERT                 = " + LAN_DATA_INSERT + "  OR " + LAN_DATA_INSERT + " = '') AND " +
                            "      (CTM_LANCAMENTO.LAN_USU_INSERT                  = " + LAN_USU_INSERT + "  OR " + LAN_USU_INSERT + " = '0') AND " +
                            "      (CTM_LANCAMENTO.LAN_DATA_UPDATE                 = " + LAN_DATA_UPDATE + "  OR " + LAN_DATA_UPDATE + " = '') AND " +
                            "      (CTM_LANCAMENTO.LAN_USU_UPDATE                  = " + LAN_USU_UPDATE + "  OR " + LAN_USU_UPDATE + " = '0') AND " +
                            "      (CTM_LANCAMENTO.CTM_LANCAMENTO_ID               = " + CTM_LANCAMENTO_ID + "  OR " + CTM_LANCAMENTO_ID + " = '0') AND " +
                            "      (CTM_LANCAMENTO.EQUIPAMENTO_ID                  = " + EQUIPAMENTO_ID + "  OR " + EQUIPAMENTO_ID + " = '0') ";

            DataSet dsRetorno = fireBird.retornaDataSet(sql, conectionString);
            return dsRetorno;

        }


        public List<ES_Lancamento> _obter_Lancamento(
                                                string CTM_LANCAMENTO_ID,
                                                string CTM_RELVOO_ID,
                                                string LAN_DATA,
                                                string LAN_DATA_INI,
                                                string LAN_DATA_FIN,
                                                string EQUIPAMENTO_ID
                                                )
        {

            if (string.IsNullOrEmpty(CTM_LANCAMENTO_ID)) CTM_LANCAMENTO_ID = "0";
            if (string.IsNullOrEmpty(CTM_RELVOO_ID)) CTM_RELVOO_ID = "0";            
            if (string.IsNullOrEmpty(EQUIPAMENTO_ID)) EQUIPAMENTO_ID = "'0'";

            string sql = "SELECT " +
                                  "CTM_LANCAMENTO.CTM_RELVOO_ID, " +
                                  "CTM_LANCAMENTO.LAN_DATA, " +
                                  "CTM_LANCAMENTO.LAN_DATA_INSERT, " +
                                  "CTM_LANCAMENTO.LAN_USU_INSERT, " +
                                  "CTM_LANCAMENTO.LAN_DATA_UPDATE, " +
                                  "CTM_LANCAMENTO.LAN_USU_UPDATE, " +
                                  "CTM_LANCAMENTO.CTM_LANCAMENTO_ID, " +
                                  "CTM_LANCAMENTO.EQUIPAMENTO_ID, " +
                                  "COALESCE(CTM_LANCAMENTO.LAN_PROCESSADO,'N') LAN_PROCESSADO " +
                            "FROM CTM_LANCAMENTO " +
                            "LEFT JOIN CTM_RELVOO ON CTM_RELVOO.CTM_RELVOO_ID = CTM_LANCAMENTO.CTM_RELVOO_ID " +
                            "WHERE " +
                            "      (CTM_LANCAMENTO.CTM_LANCAMENTO_ID               = " + CTM_LANCAMENTO_ID + "  OR " + CTM_LANCAMENTO_ID + " = '0') AND " +
                            "      (CTM_LANCAMENTO.CTM_RELVOO_ID                   = " + CTM_RELVOO_ID + "  OR " + CTM_RELVOO_ID + " = '0') AND " +                            
                            "      (CTM_LANCAMENTO.EQUIPAMENTO_ID                  = " + EQUIPAMENTO_ID + "  OR " + EQUIPAMENTO_ID + " = '0') ";
            if (!string.IsNullOrEmpty(LAN_DATA))
                sql += "    AND  (CTM_LANCAMENTO.LAN_DATA                        = " + Util.retonarAspas(Util.formataData(LAN_DATA), true) +")";

            if (!string.IsNullOrEmpty(LAN_DATA))
                sql += "     AND (CTM_LANCAMENTO.LAN_DATA BETWEEN " + Util.retonarAspas(Util.formataData(LAN_DATA_INI), true) + " AND " + Util.retonarAspas(Util.formataData(LAN_DATA_FIN), true) + "  )";
                            

            List<ES_Lancamento> lista = new List<ES_Lancamento>();
            FbConnection fbConexao = new FbConnection(conectionString);
            FbDataReader dr = fireBird.retornaDataReader(sql, conectionString, fbConexao);
            try
            {
                while (dr.Read())
                {
                    ES_Lancamento item = new ES_Lancamento();
                    item.CTM_RELVOO_ID = dr["CTM_RELVOO_ID"].ToString();
                    item.LAN_DATA = Util.formataData(dr["LAN_DATA"].ToString(),"dd/MM/yyyy");
                    item.LAN_DATA_INSERT = dr["LAN_DATA_INSERT"].ToString();
                    item.LAN_USU_INSERT = dr["LAN_USU_INSERT"].ToString();
                    item.LAN_DATA_UPDATE = dr["LAN_DATA_UPDATE"].ToString();
                    item.LAN_USU_UPDATE = dr["LAN_USU_UPDATE"].ToString();
                    item.CTM_LANCAMENTO_ID = dr["CTM_LANCAMENTO_ID"].ToString();
                    item.EQUIPAMENTO_ID = dr["EQUIPAMENTO_ID"].ToString();
                    item.LAN_PROCESSADO = dr["LAN_PROCESSADO"].ToString();
                    lista.Add(item);

                }
                return lista;
            }
            finally
            {
                fireBird.fecharConexao(fbConexao);
            }
        }


        public ES_Lancamento _obter_Lancamento_by_id(
                                                string CTM_LANCAMENTO_ID
                                                )
        {

            if (string.IsNullOrEmpty(CTM_LANCAMENTO_ID)) CTM_LANCAMENTO_ID = "'0'";

            string sql = "SELECT " +
                                  "CTM_LANCAMENTO.CTM_RELVOO_ID, " +
                                  "CTM_LANCAMENTO.LAN_DATA, " +
                                  "CTM_LANCAMENTO.LAN_DATA_INSERT, " +
                                  "CTM_LANCAMENTO.LAN_USU_INSERT, " +
                                  "CTM_LANCAMENTO.LAN_DATA_UPDATE, " +
                                  "CTM_LANCAMENTO.LAN_USU_UPDATE, " +
                                  "CTM_LANCAMENTO.CTM_LANCAMENTO_ID, " +
                                  "CTM_LANCAMENTO.EQUIPAMENTO_ID " +
                            "FROM CTM_LANCAMENTO " +
                            "LEFT JOIN CTM_RELVOO ON CTM_RELVOO.CTM_RELVOO_ID = CTM_LANCAMENTO.CTM_RELVOO_ID " +
                            "WHERE " +
                            "      (CTM_LANCAMENTO.CTM_LANCAMENTO_ID = " + CTM_LANCAMENTO_ID + "  OR " + CTM_LANCAMENTO_ID + " = '0') ";

            ES_Lancamento item = new ES_Lancamento();
            FbConnection fbConexao = new FbConnection(conectionString);
            FbDataReader dr = fireBird.retornaDataReader(sql, conectionString, fbConexao);
            try
            {
                while (dr.Read())
                {
                    item.CTM_RELVOO_ID = dr["CTM_RELVOO_ID"].ToString();
                    item.LAN_DATA = dr["LAN_DATA"].ToString();
                    item.LAN_DATA_INSERT = dr["LAN_DATA_INSERT"].ToString();
                    item.LAN_USU_INSERT = dr["LAN_USU_INSERT"].ToString();
                    item.LAN_DATA_UPDATE = dr["LAN_DATA_UPDATE"].ToString();
                    item.LAN_USU_UPDATE = dr["LAN_USU_UPDATE"].ToString();
                    item.CTM_LANCAMENTO_ID = dr["CTM_LANCAMENTO_ID"].ToString();
                    item.EQUIPAMENTO_ID = dr["EQUIPAMENTO_ID"].ToString();

                }
                return item;
            }
            finally
            {
                fireBird.fecharConexao(fbConexao);
            }
        }


        public void _inserir_Lancamento(
                                        string CTM_LANCAMENTO_ID,                                    
                                        string CTM_RELVOO_ID,
                                        string LAN_DATA,
                                        string LAN_PROCESSADO,
                                        string EQUIPAMENTO_ID
                                        )
        {

            string sql = " INSERT INTO CTM_LANCAMENTO " +
                         "      ( " +
                         "          CTM_LANCAMENTO_ID      , " +
                         "          CTM_RELVOO_ID          , " +
                         "          LAN_DATA               , " +
                         "          LAN_PROCESSADO         , " +
                         "          EQUIPAMENTO_ID          " +                         
                         "      )" +
                         "  VALUES " +
                         "      ( " +
                              Util.retonarNull(CTM_RELVOO_ID) + ", " +
                              Util.retonarNull(CTM_RELVOO_ID) + ", " +                              
                              Util.retonarAspas(Util.formataData(LAN_DATA), true) + ", " +
                              Util.retonarAspas(LAN_PROCESSADO, true) + ", " +
                              Util.retonarNull(EQUIPAMENTO_ID) +                               
                 "      )";
            try
            {
                fireBird._ExecutarComandoRetornandoID(sql, conectionString, false, usuario);
            }
            catch
            { }
        }



        public void _atualizar_Lancamento(
                                                string CTM_RELVOO_ID,
                                                string LAN_DATA,
                                                string LAN_DATA_INSERT,
                                                string LAN_USU_INSERT,
                                                string LAN_DATA_UPDATE,
                                                string LAN_USU_UPDATE,
                                                string CTM_LANCAMENTO_ID,
                                                string EQUIPAMENTO_ID
                                                )
        {

            string sql = " UPDATE CTM_LANCAMENTO SET " +
                         "      CTM_RELVOO_ID                   = " + Util.retonarAspas(CTM_RELVOO_ID, true) + ", " +
                         "      LAN_DATA                        = " + Util.retonarAspas(Util.formataData(LAN_DATA), true) + ", " +
                         "      LAN_DATA_INSERT                 = " + Util.retonarAspas(LAN_DATA_INSERT, true) + ", " +
                         "      LAN_USU_INSERT                  = " + Util.retonarAspas(LAN_USU_INSERT, true) + ", " +
                         "      LAN_DATA_UPDATE                 = " + Util.retonarAspas(LAN_DATA_UPDATE, true) + ", " +
                         "      LAN_USU_UPDATE                  = " + Util.retonarAspas(LAN_USU_UPDATE, true) + ", " +
                         "      EQUIPAMENTO_ID                  = " + Util.retonarAspas(EQUIPAMENTO_ID, true) +
                         " WHERE CTM_LANCAMENTO_ID =  " + CTM_LANCAMENTO_ID;
            try
            {
                fireBird._ExecutarComandoRetornandoID(sql, conectionString, false, usuario);
            }
            catch
            { }
        }



        public void _excluir_Lancamento(string CTM_LANCAMENTO_ID)
        {
            string sql = "DELETE FROM CTM_LANCAMENTO WHERE CTM_LANCAMENTO_ID = " + CTM_LANCAMENTO_ID;
            try
            {
                fireBird._ExecutarComandoRetornandoID(sql, conectionString, false, usuario);
            }
            catch
            { }
        }

        public void sp_ctm_lancamento_processar(string P_LACANMENTO_ID)
        {
            string sql = "EXECUTE PROCEDURE SP_CTM_LANCAMENTO_REPROCESSAR ("+P_LACANMENTO_ID+")";
            try
            {
                fireBird._ExecutarComandoRetornandoID(sql, conectionString, false, usuario);
            }
            catch
            { }
        }


        #endregion
    }
}
